package com.ittao.taoaicodecommon.manage.storage.strategy;

import com.ittao.taoaicodecommon.manage.storage.enums.StorageType;
import org.springframework.core.io.Resource;

import java.io.IOException;

/**
 * 文件存储策略接口
 * 定义统一的文件存储操作方法，支持本地存储和云存储
 */
public interface FileStorageStrategy {

    /**
     * 获取存储类型
     */
    StorageType getStorageType();

    /**
     * 写入文件
     * @param filePath 文件路径
     * @param content 文件内容（字节数组）
     * @throws IOException IO异常
     */
    void writeFile(String filePath, byte[] content) throws IOException;

    /**
     * 读取文件
     * @param filePath 文件路径
     * @return 文件资源
     * @throws IOException IO异常
     */
    Resource readFile(String filePath) throws IOException;

    /**
     * 删除文件
     * @param filePath 文件路径
     * @throws IOException IO异常
     */
    void deleteFile(String filePath) throws IOException;

    /**
     * 构建代码输出路径
     * @param userId 用户ID
     * @param fileName 文件名
     * @return 完整路径
     */
    String buildCodeOutputPath(String userId, String fileName);

    /**
     * 构建代码部署路径
     * @param userId 用户ID
     * @param deployKey 部署键
     * @return 完整路径
     */
    String buildCodeDeployPath(String userId, String deployKey);

    /**
     * 构建显示路径
     * 本地策略返回本地绝对路径，COS策略返回COS线上路径
     * @param baseDirPath 基础目录路径
     * @param userId 用户ID
     * @param appId 应用ID
     * @param codeType 代码类型
     * @return 显示路径
     */
    String buildDisplayPath(String baseDirPath, String userId, String appId, String codeType);
}